1.0 Field of the Invention
This invention relates to versioning, and in particular, to generating unique name/version number pairs when names can be re-used.
2.0 Description of the Related Art
In computer systems, information is typically stored in files. A file is an object in a computer system. An object may also be a directory or folder. A user typically changes the information in a file which provides various versions of the file. A version control system may be used to keep track of the versions of a file.
A version control system is a software application that keeps track of various versions of objects, referred to as versioned objects. Some version control systems generate a version number for each versioned object. A versioned object has a name, which is typically set by the user, and a version number. The combination of the name and the version number provides an identifier to a particular version of the object, and also reflects the derivation history of the versioned object. A name/version number pair refers to a version of an object which is associated with a version number, and is represented by the name of the object, for example “A”, followed by a colon then the version number, such as A:1.0.
One well-known algorithm for generating version numbers can be used if the same name can never be used by more than one object. In this algorithm, each version number is a series of dot-separated integers. A version number of 1.0 is assigned to the first version of an object. The version number of the first successor to a versioned object is generated by incrementing the last integer in the dot-separated series by one. Each successor after the first successor appends a versioning pair comprising two more integers (n.0) to the end of the series, where “n” is increased by one for each successor.
FIG. 1 depicts a diagram illustrating version numbers which were generated using the well-known algorithm described above. Initially a versioned object 20, named “A” is associated with a version number of 1.0. Version 1.0 of “A” is modified to provide a first successor 22 which is associated with a version number of 1.1. Version 1.1 of “A” 22 is modified to provide a first successor 24 which is associated with version number 1.2.
Version 1.1 of “A” is modified again to provide a second successor 26 which is associated with a version number of 1.1.1.0. That is, a versioning pair of (1.0) is appended to the version number of 1.1. Version 1.1.1.0 of “A” 26 is modified to provide a first successor 28 which has a version number of 1.1.1.1.
Version 1.1 of “A” is again modified to provide a third successor 30 which is associated with version number 1.1.2.0. In this example, a versioning pair of (2.0) is appended to the version number 1.1. Version 1.1.2.0 of “A” is then modified to provide a first successor 32 having version number of 1.1.2.1.
In another example of the technique above, successive versions of an object named “A” are: A:1.0, A:1.1 and A:1.2. Successive versions of an object named “B” are B:1.0, B:1.1, B:1.2 and B:1.3. This name and version numbering scheme works as long as no version of object A can ever have its name changed, for example to “B”, because this would result in the following name and version numbers for the object: A:1.0, A:1.1, A:1.2 and B:1.3, and leads to a conflict with the identifiers of any other object named B. However, it is common for the same name to be associated at different times with different objects. For example the object originally named “B” might be renamed to “C,” allowing the name “B” to be reassigned to the object originally named “A.”. Using the conventional name and version numbering technique results in a conflict. Therefore there is a need for an improved technique for version numbering.